package com.holiday.spring.domain;

import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * AOP编程
 *      1、横切关注点：对哪些方法进行拦截，拦截后怎么处理，即对哪些业务模块进行处理；
 *      2、在类中有很多方法即连接点joinpoint，筛选出一堆需要关注的方法即切入点pointcut，进行增加业务处理即通知advice；
 *      3、实际joinpoint、pointcut、advice；这三个概念就advice需要写代码，其他都是业务名词
 *      4、切面Aspect：就是一个类，里面定义了切入点跟通知，定义在什么地方，什么时间点，做什么事情；
 *          1、advice指明了时间和要做的事情；
 *          2、pointcut：指定在什么地方做这个事情
 *      5、目标target：目标类，真正的业务逻辑，可以在目标类不知情的条件下，增加新的功能到目标类的链路上
 *      6、织入weaving：把切面aspect应用到目标函数的过程称为织入，只是一个过程概念的描述而已
 *      7、AOP代理：AOP框架创建的对象，代理就是目标对象的加强，SPring中的AOP代理可以使用JDK动态代理，也可以是CGLB代理
 *      8、总结：
 *          1、AOP编程就是切面Aspect跟代理；其他都是概念
 *
 *
 *
 *      1、Advice类型有5种
 *          1、@Before前置通知：在执行目标方法之前运行
 *          2、@After后置通知：在目标方法运行结束之后
 *          3、@AfterReturning返回通知：在目标方法正常返回值后运行
 *          4、@AfterThrowing异常通知：在目标方法出现异常后运行
 *          5、@Around环绕通知：在目标方法完成前、后做增强处理 ,环绕通知是最重要的通知类型 ,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint，需要手动执行 joinPoint.procced()
 *
 *      2、切入点表示式：
 *          1、访问修饰符-返回值类型（必填）-包和类 -方法（必填）
 *          2、@Pointcut("execution(public int net.xdclass.sp.service.VideoOrderService.*(..))")
 *          3、常见匹配语法
 *              1、*：匹配任何数量字符 单个；
 *              2、..：匹配任何数量字符,可以多个，在类型模式中匹配任何数量子包；在方法参数模式中匹配任何数量参数
     *              1、() 匹配一个不接受任何参数的方法
     *              2、(..) 匹配一个接受任意数量参数的方法
     *              3、(*) 匹配了一个接受一个任何类型的参数的方法
     *              4、(*,Integer) 匹配了一个接受两个参数的方法，其中第一个参数是任意类型，第二个参数必须是Integer类型
 *          4、常见例子
 *              1、任意公共方法：execution（public * *（..））
 *              2、任何一个名字以“save”开始的方法：execution（* save*（..））
 *              3、VideoService接口定义的任意方法（识别）：execution（* net.xdclass.service.VideoService.*（..））
 *              4、在service包中定义的任意方法（识别）：execution（* net.xdclass.service.*.*（..））
 *              5、匹配 service 包,子孙包下所有类的所有方法（识别）：execution（* net.xdclass.service..*.*（..））
 *
 *
 *
 */
public class Video {
    private int id;
    private String title;

    public  void init(){}
    public  void destroy(){}

    private List<String> chapterList;
    private Map<Integer,String> videoMap;

    public List<String> getChapterList() {
        return chapterList;
    }

    public void setChapterList(List<String> chapterList) {
        this.chapterList = chapterList;
    }

    public Map<Integer, String> getVideoMap() {
        return videoMap;
    }

    public void setVideoMap(Map<Integer, String> videoMap) {
        this.videoMap = videoMap;
    }

    public Video() {
    }

    public Video(int id, String title) {
        this.id = id;
        this.title = title;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
